#include<cstdio>
#include<cmath>
#include<algorithm>
#include<iostream>

using namespace std;

typedef long double LD;

const int MAXF=5e5+1111;
const int MAXS=1111;

LD x[MAXS],y[MAXS];

int fa[MAXS];

struct Edge {
	int next;
	int to;
	LD dis;
}E[MAXF];

inline bool cmp(Edge x,Edge y) {
	return x.dis<y.dis;
}

inline LD distan(LD x1,LD x2,LD y1,LD y2) {
	return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}

int tem;

inline void add(int f,int t,LD d) {
	E[++tem].next=f;
	E[tem].to=t;
	E[tem].dis=d;
}

int find_fa(int x) {
	if(fa[x]==x)
		return x;
	fa[x]=find_fa(fa[x]);
	return fa[x];
}

LD ans;

int n,m;

inline void kruskal() {
	int f1,f2,k=0;
	for(int i=1;i<=n;i++) 
		fa[i]=i;
	for(int i=1;i<=tem;i++) {
		f1=find_fa(E[i].next);
		f2=find_fa(E[i].to);
		if(f1!=f2) {
			fa[f1]=f2;
			ans+=E[i].dis;
			k++;
			if(k==n-1) 
				break;
		}
	}
}

int main() {
	cin>>n>>m;
	for(int i=1;i<=n;i++)
		cin>>x[i]>>y[i];
	for(int i=1;i<=m;i++) {
		int a,b;
		cin>>a>>b;
		add(a,b,0);
	}
	for(int i=1;i<=n;i++) {
		for(int j=1;j<i;j++) {
			add(i,j,distan(x[i],x[j],y[i],y[j]));
		}
	}
	stable_sort(E+1,E+1+tem,cmp);
	kruskal();
	printf("%.2LF",ans);
	return 0;
}